﻿//有一个𝑛∗𝑚的矩形方阵，每个格子上面写了一个小写字母。
//小红站在矩形的左上角，她每次可以向右或者向下走，走到某个格子上就可以收集这个格子的字母。
//小红非常喜欢 "love" 这四个字母。
//她拿到一个 l 字母可以得 4 分，拿到一个 o 字母可以得 3 分,
//拿到一个 v 字母可以得 2 分，拿到一个 e 字母可以得 1 分。
//她想知道，在最优的选择一条路径的情况下，她最多能获取多少分？

//示例1
//输入：
//3 2
//ab
//cd
//ef
//
//输出：1
//
//说明：选择下、下、右）这条路径即可，可以收集到 acef 这四个字母各一次，获得 0 + 0 + 1 + 0 = 1 分。
//
//示例2
//输入：
//2 3
//lle
//ove
//
//输出：11

#include <iostream>
using namespace std;
const int N = 510;
char g[N][N];
int dp[N][N];
int m, n;
int main() {
    cin >> m >> n;
    for (int i = 1; i <= m; i++) {
        for (int j = 1; j <= n; j++) {
            cin >> g[i][j];
        }
    }
    for (int i = 1; i <= m; i++) {
        for (int j = 1; j <= n; j++) {
            int t = 0;
            if (g[i][j] == 'l') t = 4;
            else if (g[i][j] == 'o') t = 3;
            else if (g[i][j] == 'v') t = 2;
            else if (g[i][j] == 'e') t = 1;
            dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + t;
        }
    }
    cout << dp[m][n] << endl;
    return 0;
}

